/**
 * 项目名：	Rumba Plan
 * 
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 文件名：	IQueryDefinitionMgr.java
 * 模块说明：	
 * 修改历史：
 * May 14, 2007 - zhangyanbo - 创建。
 */
package com.hd123.rumba.qt.def;

import java.io.File;
import java.io.InputStream;
import java.util.List;

import net.sf.hibernate.HibernateException;

import com.hd123.rumba.domain.IDomain;
import com.hd123.rumba.exception.BusinessException;
import com.hd123.rumba.qt.result.QueryResultDescription;
import com.hd123.rumba.runtime.IManager;
import com.hd123.rumba.runtime.OperateContext;
import com.hd123.rumba.user.IUser;

/**
 * @author zhangyanbo
 * 
 */
public interface IQueryDefinitionMgr extends IManager {

  public QueryDefinition getQueryDefinition(IQueryDef queryDef) throws BusinessException,
      HibernateException;

  public QueryDefinition getQueryDefinition(QueryResultDescription qrd) throws BusinessException,
      HibernateException;

  /**
   * 如果文件已经存在, 则替换之
   * 
   * @param base
   * @param name
   * @param content
   */
  public File saveFile(String folder, String name, InputStream content, IUser user)
      throws BusinessException, HibernateException;

  public IQueryDef getQueryDef(String uuid) throws BusinessException, HibernateException;

  /** 根据文件名查找查询定义对象，本方法是为了与Rumba模式兼容而定义的，在以后的开发中可能会删除。 */
  public IQueryDef getQueryDefByFile(String location, String filename) throws BusinessException,
      HibernateException;

  /**
   * 保存查询定义。
   * 
   * @param queryDef
   *          查询定义
   * @param cfvUuids
   *          相关功能视图
   * @param operCtx
   *          操作上下文
   * @throws BusinessException
   * @throws HibernateException
   */
  public void saveQueryDef(IQueryDef queryDef, List<String> cfvUuids, OperateContext operCtx)
      throws BusinessException, HibernateException;

  public void removeDef(IQueryDef queryDef, OperateContext operCtx) throws BusinessException,
      HibernateException;

  public IQueryDef createQueryDef(IDomain domain) throws BusinessException, HibernateException;

  /**
   * 取得用户有权限访问的查询定义列表。
   * 
   * @param domain
   *          当前登录域
   * @param user
   *          用户
   * @return 查询定义列表
   * @throws BusinessException
   * @throws HibernateException
   */
  public List<IQueryDef> getQueryDefsByUser(IDomain domain, IUser user) throws BusinessException,
      HibernateException;

  public IQueryDef getNextQueryDefByName(IQueryDef queryDef, String nextQueryName)
      throws BusinessException, HibernateException;

}
